use std::rc::Rc;
use std::cell::RefCell;
// RefCell是动态的在运行时进行检查,支持在外部不可变的情况下改变内部的值

#[test]
fn test_refcell() {
    let x = RefCell::new(1);
    *(x.borrow_mut()) = 2;

    println!("{:?}", x)
}

// 通常与Rc配合，实现更灵活的功能
// 同时如果出问题编译器也不会背锅
#[test]
fn test_rc_refcell(){
    let b = Rc::new(RefCell::new(1));

    let a = b.clone();

    *((*a).borrow_mut()) = 2;

    let c = b.clone();

    println!("{:?} {:?} {:?}", a, b, c);

    *((*c).borrow_mut()) = 3;

    println!("{:?} {:?} {:?}", a, b, c);
}
